Currently, there are many technologies that allow developers to write code in a non-Java format (e.g., a scripting language such as JavaServer Pages (JSP) or Groovy, Web Services Description Language (WSDL), Enterprise JavaBeans (EJB)) which is translated into a Java source file. The Java source file may be compiled by a compiler into what is known as Java bytecodes, which are stored in a binary class file. Java bytecodes refer to an intermediate language that is later executed by a runtime program, such as a Java Virtual Machine (JVM).
During the translation process described above, the Java source code may be generated using particular versions of resources or technologies. For example, JSP may use the JSP Standard Tag Library (JSTL) resource. JSTL refers to a set of software routines that are used in JSP pages by referencing them with tags. In another example, JSP may use the JavaServerFaces (JSF) framework. JSF is a framework for building user interfaces for Java applications. Oftentimes, the generated Java source code is kept in binary format and used on future versions of these resources and technologies, including the future versions of the runtime environment (e.g., version of the runtime program).
However, the specifications for these software resources, technologies and runtime environments are constantly being updated and revised. Additional functionality and features may be deployed. Particular code may no longer be needed. As a result, the Java source code used on future versions of these resources, technologies and runtime environments may not be the most efficient in terms of performance.